_require local "../../../../basis.smi"
_require local "../../../data/symbols/main/Loc.smi"
_require local "../../../data/symbols/main/Symbol.smi"
_require local "../../../data/symbols/main/RecordLabel.smi"
_require local "../../../libs/list-utils/main/ListSorter.smi"

_require local "../../../compilerIRs/absyn/main/Absyn.smi"
_require local "../../../extensions/usererror/main/UserErrorUtils.smi"
_require local "./ElaborateError.ppg.smi"

_require "../../../compilerIRs/patterncalc/main/PatternCalc.ppg.smi"
_require "../../../compilerIRs/patterncalc/main/PatternCalcInterface.ppg.smi"

structure UserTvarScope =
  struct
    (* an ordered set of user type varaibles *)
    type tvset (= boxed)
    val decide : PatternCalc.pltopdec list -> PatternCalc.pltopdec list
    val decideSigexp : PatternCalc.plsigexp -> PatternCalc.plsigexp
    val decideInterface : PatternCalcInterface.interface -> PatternCalcInterface.interface
    val decidePitopdecs :  PatternCalcInterface.pitopdec list -> PatternCalcInterface.pitopdec list
  end
